package com.zhuangjie.openfeign.aop.retry.annotation;

import feign.RetryableException;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * FeignRetry
 * 该注解可以根据指定异常类型来决定是否重试，还配置了如何重试
 * 注意GET请求已经默认有重试，如果给GET请求加上FeignRetry注解，会让重试迪卡尔积（一次@FeignRetry重试会进行预定的GET请求次数 即NxM）
 *
 * @author zhuangjie
 * @date 2023/11/08
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface FeignRetry {

    Class<? extends Exception>[] exception() default {RetryableException.class} ;

    int maxAttempt() default 2;

    int retryInterval() default 100;
}